home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / libs / gle / fitbez.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-11-29  |  1.4 KB  |  59 lines

  1. #include "all.h"
  2. #include <math.h>
  3. #define PI 3.1415926
  4. int polar_xy(double r, double angle, double *dx, double *dy);
  5. int xy_polar(double dx,double dy,double *radius,double *angle);
  6.  
  7. int glefitcf_(long *mode,float *x, float *y, long *l, long *m, float *u, float *v, long *n);
  8. fitbez(double **pxv, double **pyv, int **pmv,int *pnp, int multivalued)
  9. {
  10.     double *xv, *yv;
  11.     int *m;
  12.     int n,i;
  13.     float *xin,*yin,*xout,*yout,*xx,*yy,*xxout,*yyout;
  14.     long mode,nsub,outp,ninp;
  15.  
  16.  
  17.     if (*pnp>138  || *pnp<=2) return;
  18.     xin = myallocz(*pnp*sizeof(*xin));
  19.     yin = myallocz(*pnp*sizeof(*xin));
  20.     xout = myallocz(300*sizeof(*xin));
  21.     yout = myallocz(300*sizeof(*xin));
  22.     xxout = xout; yyout = yout;
  23.     /* myfree(*pmv); */
  24.     *pmv = myallocz(300*sizeof(i));
  25.  
  26.     xv = *pxv;
  27.     yv = *pyv;
  28.     xx = xin; yy = yin;
  29.     for (i=0;i<*pnp;i++) {
  30.         *xx++ = *xv++;
  31.         *yy++ = *yv++;
  32.     }
  33.     mode = 1;
  34.     if (multivalued) mode=2;
  35.     nsub = floor(280/(*pnp-1));
  36.     outp = 300;
  37.     outp = (*pnp-1)*nsub+1;
  38.     ninp = *pnp;
  39.     glefitcf_(&mode,xin,yin,&ninp,&nsub,xout,yout,&outp);
  40.     xv = myallocz(300*sizeof(*xv));
  41.     yv = myallocz(300*sizeof(*xv));
  42.     /* myfree(*pxv);     myfree(*pyv); */
  43.     *pxv = xv;
  44.     *pyv = yv;
  45.     *pnp = outp;
  46.     for (i=0;i<*pnp;i++) {
  47.         *xv++ = *xout++;
  48.         *yv++ = *yout++;
  49.     }
  50.     /* should call FREE to deal old points */
  51.     m = *pmv;
  52.     for (i=0;i<=*pnp;i++) *m++ = 0;    /* no missing values */
  53.  
  54.     myfree(xin);
  55.     myfree(yin);
  56.     myfree(xxout);
  57.     myfree(yyout);
  58. }
  59.